//
//  SSStatusViewModel.swift
//  SSSina
//
//  Created by ss on 2017/7/4.
//  Copyright © 2017年 ss. All rights reserved.
//

import UIKit

class SSStatusViewModel: NSObject {

    
    //模型
    var homeModel :SSHomeModel?{
        
        didSet{
            //认证
            verifiedImage = dealVerifiedImage(verified: homeModel?.user?.verified ?? -1)
            //会员等级
            mbrankImage = dealMbrankImage(mbrank: homeModel?.user?.mbrank ?? 0)
            //来源
            sourceText = dealSinaSource(source: homeModel?.source)
        }
    }
    //认证图片
    var verifiedImage:UIImage?
    //会员等级
    var mbrankImage:UIImage?
    //来源
    var sourceText: String?
    //微博时间
    var createdAtText:String?{
        return dealSinaTime(created_at: homeModel?.created_at)

    }
}

extension SSStatusViewModel{
    //MARK: - 处理微博时间
    /*
     - 时间的业务逻辑
     - 微博时间是否是今年
     - 是今年
     - 是今天
     -如果发布微博时间和当前时间求差
     - 如果s < 60 显示刚刚
     - 如果s >=60 && s < 3600 显示xx分钟前
     - 如果 s >= 3600 显示 xx小时前
     - 是昨天
     - 昨天 12:12
     - 是其它
     - 05月05日 12:12
     - 不是今年
     - 格式: 2015年09月09日 12:12
     */
    fileprivate func dealSinaTime(created_at: Date?) -> String?{
        // 判断它是否为nil
        guard let d = created_at else {
            return nil
        }
        // 测试数据
        //        let d = d1.addingTimeInterval(-3600*24 * 365)
        
        // 定义时间格式化
        let df = DateFormatter()
        // 记录日期格式字符串
        let dateFormatString: String
        // 判断是否是今年
        if isThisYear(sinaDate: d) {
            // 日历类
            let calendar = Calendar.current
            // 如果是今天
            if calendar.isDateInToday(d) {
                // 计算发布微博日期和当前日期比较差值
                let s = Int(-d.timeIntervalSinceNow)
                // 显示刚刚
                if s < 60 {
                    return "刚刚"
                }else if s >= 60 && s < 3600{
                    return "\(s/60)分钟前"
                }else{
                    return "\(s/3600)小时前"
                }
            }else if calendar.isDateInYesterday(d){
                // 昨天
                // 昨天 12:12
                dateFormatString = "昨天 HH:mm"
            }else{
                // 其它
                // 05月05日 12:12
                dateFormatString = "MM月dd日 HH:mm"
            }
        }else{
            // 格式: 2015年09月09日 12:12
            //            print("其它")
            // 指定格式
            dateFormatString = "yyyy年MM月dd日 HH:mm"
        }
        // 指定格式
        df.dateFormat = dateFormatString
        // 返回
        return df.string(from: d)
        
    }
    // 判断是否是今年
    fileprivate func isThisYear(sinaDate: Date) -> Bool{
        // 定义时间格式化
        let df = DateFormatter()
        // 指定格式
        df.dateFormat = "yyyy"
        // 计算出当前的系统日期
        let currentDate = Date()
        // 通过日期获取日期字符串
        // 新浪微博
        let sinaString = df.string(from: sinaDate)
        // 当前时间
        let currentString = df.string(from: currentDate)
        return sinaString == currentString
    }
}



extension SSStatusViewModel{
    //MARK: - 处理微博来源
    fileprivate func dealSinaSource(source: String?) -> String?{
        // 判断是否为nil 且是否保存">
        guard let s = source, s.contains("\">") else {
            return "来自 黑马25期微博"
        }
        
        // 获取起始
        let startIndex = s.range(of: "\">")!
        // 获取结束
        let endIndex = s.range(of: "</")!
        //lowerBound 底左侧 upperBound 高 右侧 (升序 从左到右)
        let result = s.substring(with: startIndex.upperBound..<endIndex.lowerBound)
        return "来自 " + result
    }
}

extension SSStatusViewModel{
    
    //处理会员等级业务逻辑 会员等级1-6
    fileprivate func  dealMbrankImage(mbrank:Int)->UIImage?{
        
        if mbrank >= 1 && mbrank <= 6 {
            return UIImage(named: "common_icon_membership_level\(mbrank)")
        }
        return UIImage(named: "common_icon_membership")
    }
    
    //处理用户认证图片 avatar_vip
    /// 认证类型 -1：没有认证，1，认证用户，2,3,5: 企业认证，220: 达人
    fileprivate func dealVerifiedImage(verified:Int)->UIImage?{
        //图片名称
        var imgName = ""
        switch verified {
        case 1:
            imgName = "avatar_vip"
        case 2,3,5:
            imgName = "avatar_enterprise_vip"
        case 220:
            imgName = "avatar_grassroot"
        default:
            imgName = "avatar_vgirl"
        }
        return UIImage(named: imgName)
    }

}
